package co.edu.uniandes.sd.interfaz;

import java.awt.BorderLayout;
import java.io.File;
import java.util.ArrayList;

import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;

/**
 * @author Kirill Grouchnikov
 */
public class FileTreePanel extends JPanel implements TreeSelectionListener
{
    /**
     * Selection
     */
    private String seleccion;
    
    private boolean conRoots;

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    /**
     * The file tree.
     */
    private JTree tree;
    
    private File[] roots;
    
    private int indicador;
    
    private ArrayList<String>extensiones;

    private InterfazCliente principal;

    /**
     * Creates the file tree panel.
     * @param i 
     */
    public FileTreePanel( InterfazCliente ventana, boolean conRoots, int i )
    {
        principal = ventana;
        this.conRoots = conRoots;
        indicador = i;
        this.setLayout( new BorderLayout( ) );

        ArrayList<String>extensiones = new ArrayList<String>();
        extensiones.add("mpg");
        extensiones.add("avi");
        extensiones.add("mpeg");
        
        extensiones.add("mp3");
        extensiones.add("wav");
        extensiones.add("wma");
        
        extensiones.add("pdf");
        extensiones.add("doc");
        extensiones.add("docx");
        extensiones.add("txt");       
        
        this.extensiones = extensiones;
        
        if(conRoots)
        {
        	roots = File.listRoots();
        }
        else
        {
        	roots = new File("./carpetaCompartida/"+principal.darNombreNodo()).listFiles();
        }
        FileTreeNode rootTreeNode = new FileTreeNode( roots, extensiones );
        this.tree = new JTree( rootTreeNode );
        this.tree.setCellRenderer( new FileTreeCellRenderer( ) );
        this.tree.setRootVisible( false );
        // Add a listener
        tree.addTreeSelectionListener(this);
        final JScrollPane jsp = new JScrollPane( this.tree );
        jsp.setBorder( new TitledBorder( "Archivos" ) );
        this.add( jsp, BorderLayout.CENTER );
    }

    public String darSeleccionTree( )
    {
        return seleccion;
    }

	@Override
	public void valueChanged( TreeSelectionEvent e )
    {
        FileTreeNode node = ( FileTreeNode )e.getPath( ).getLastPathComponent( );
        // System.out.println("You selected " + node.toStringNew( ));
        seleccion = node.toStringNew( );
        if(!node.file.isDirectory())
        {
        	if(conRoots)
        		principal.actualizarRutaArchivo( darSeleccionTree( ) );
        	else
        		principal.actualizarTamanioArchivo(node.file.length());
        }
        else
        {
        	if(conRoots)
        		principal.actualizarRutaArchivo( "" );
        	else
        	{
        		principal.actualizarTamanioArchivo(0);
        		principal.actualizarTablaArchivos(seleccion);
        	}
        	
        }
    }

	public void refresh() 
	{
		if(conRoots)
        {
        	roots = File.listRoots();
        }
        else
        {
        	roots = new File("./carpetaCompartida/"+principal.darNombreNodo()).listFiles();
        }
        FileTreeNode rootTreeNode = new FileTreeNode( roots, extensiones );
        this.tree = new JTree( rootTreeNode );
        this.tree.setCellRenderer( new FileTreeCellRenderer( ) );
        this.tree.setRootVisible( false );
        // Add a listener
        tree.addTreeSelectionListener(this);
        final JScrollPane jsp = new JScrollPane( this.tree );
        jsp.setBorder( new TitledBorder( "Archivos" ) );
        this.removeAll();
        this.add( jsp, BorderLayout.CENTER );
        this.repaint();
	}

}